package com.yf.zzmusic.utils;

import lombok.extern.slf4j.Slf4j;

import java.util.Base64;
import java.io.File;
import java.io.FileOutputStream;
import java.io.OutputStream;

/**
 * @Description Base64 工具类 将生成的 bae64 转为 java.io.File 文件。
 * @Date 2024年7月9日 16点18分
 */

@Slf4j
public final class Base64Util {
  public static File base64ToFile(String base64) {
    try {
      // Base64解码
      byte[] b = Base64.getDecoder().decode(base64);
      for(int i = 0; i < b.length; ++i ){
        if(b[i] < 0){
          //调整异常数据
          b[i] += 256;
        }
      }
      // 对文件重命名，设定为当前系统时间的毫秒数加UUID
      String newFileName = System.currentTimeMillis() + "-" + ".png";
      // 放在本地临时文件目录
      String localFilePath = String.format("%stemp%s%s%s%s%s%s", File.separator, File.separator, DateUtil.currentYear(), File.separator, DateUtil.currentMonth(), File.separator, DateUtil.currentDay());
      File filePath = new File(localFilePath);
      if (!filePath.exists()) {
        //　mkdirs(): 创建多层目录
        filePath.mkdirs();
      }
      // 文件全限定名
      String path = localFilePath + File.separator + newFileName;
      // 将数据通过流写入文件
      OutputStream out = new FileOutputStream(path);
      out.write(b);
      out.flush();
      out.close();
      return new File(path);
    } catch (Exception e) {
      log.error(e.toString());
    }
    return null;
  }
}
